<?php

/**
 * Description of TwigProvider
 *
 * @author polacseka
 */
class XDD_Manager_TwigProvider extends XDD_Provider
{
	public $xName = 'Twig sablonozó objektumszolgáltató';

	public $contentType = 'text/html; charset=utf-8';

	/**
	 * @var Twig_Environment
	 */
	protected $twig;

	/**
	 * A sablonfájlok közös gyökérkönyvtárára mutató x10 gyökér-relatív útvonal.
	 * @var String
	 */
	protected $tplSearchRootPath = '';

	/**
	 * Az x10 gyökérkönyvtárához relatívan megadott útvonal (NE végződjön
	 * perrel!).
	 * Értékei lehetnek:
	 * <ul>
	 * <li><b>null</b>: Alapértelmezés. A Twig a sablonokat a rendszer temp-jébe
	 * fogja fordítani. <i>Nem ajánlott nem dedikált környezetben!</i></li>
	 * <li><b>false</b>: A Twig nem menti a fordított forrásokat (<i>Nem
	 * ajánlott</i>).</li>
	 * <li><b>útvonal</b>: Ebbe a könyvtárba kerülnek tárolásra a sablonokból
	 * fordított PHP kódok.</li>
	 * </ul>
	 * @var String
	 */
	protected $tplCacheRootPath = '';

	/**
	 * A {@link tplSearchRootPath}-hoz relatívan megadott sablonfájl elérési
	 * útja és teljes neve. Csak abban az esetben, ha a szolgáltatót ennek a
	 * konkrét sablonnak a megjelenítéséért példányosítottad!
	 * @var String
	 * @see __toString
	 */
	protected $tplFile = '';

	/**
	 * A Twig sablonnak átadandó adatok.
	 * @var Array
	 */
	public $data = array();

	/**
	 * A Twig_Environment osztály konstruktorának egyéb beállításai:
	 * <ul>
	 * <li><b>debug</b>: Ha TRUE, a generált sablonok __toString() metódusát
	 * használva megjeleníthetőek a csomópontok (<i>alapértelmezésként
	 * FALSE</i>)</li>
	 * <li><b>trim_blocks</b>: Ha TRUE, kiveszi a fölöslegesnek tűnő szóközöket
	 * (</li><i>alapértelmezésként FALSE</i>)</li>
	 * <li><b>charset</b>: A sablonok által használt karakterkódolás (<i>
	 * alapértelmezésként UTF-8</i>)</li>
	 * <li><b>base_template_class</b>: Az alapértelmezett sablonosztály amelynek
	 * segítségével a sablonok generálódnak (<i>alapértelmezésként
	 * Twig_Template</i>)</li>
	 * <li><b>auto_reload</b>: Amennyiben TRUE, a generált sablonok minden
	 * oldallekéréskor újragenerálódnak (ez az alapértelmezés) - a gyorsabb
	 * működésért az éles környezetben érdemes FALSE-ra állítani</li>
	 * </ul>
	 * @var Array
	 */
	protected $twigSettings = array();

	public function __construct(x10_Config $config=NULL)
	{
		parent::__construct($config);

		$this->tplSearchRootPath = x10::$systemRoot.$this->config->getConfigKey('displaySearch');
		$this->tplCacheRootPath = x10::$systemRoot.$this->config->getConfigKey('displayCache');
	}

	public function init()
	{
		$this->tplFile = $this->config->getConfigKey('tplFile');
		$this->tplSearchRootPath = x10::$systemRoot.$this->config->getConfigKey('displaySearch');
		$this->tplCacheRootPath = x10::$systemRoot.$this->config->getConfigKey('displayCache');

		$data = $this->config->getConfigKey('data');
		if (!is_null($data)) $this->data = $data;
		$ts = $this->config->getConfigKey('twigSettings');
		if (!is_null($ts)) $this->twigSettings = $ts;

		$this->twigSettings['cache'] = $this->tplCacheRootPath;

		$this->twig = new Twig_Environment(
			new Twig_Loader_Filesystem($this->tplSearchRootPath),
			$this->twigSettings
		);
	}

	/**
	 * @return Twig_Environment
	 */
	public function get()
	{
		return $this->twig;
	}

	protected function applyData()
	{
		$this->config->override($this->data);
	}

	/**
	 * Visszatér a Twig sablon kimenetével, amennyiben volt meghatározva
	 * sablonfájl. Ellenőrzést NEM végez! Ha nincs megadva {@link tplFile},
	 * hibaüzenetek keletkeznek!
	 * @return String
	 */
	public function __toString()
	{
		$tpl = $this->twig->loadTemplate($this->tplFile);
		return $tpl->render($this->data);
	}
}

?>